From 160e3425fc9832c4c0c12fb66b35ffcc7e9f51a7 Mon Sep 17 00:00:00 2001 From: Ewan Mellor Date: Thu, 26 Oct 2006 16:02:49 +0100 Subject: [PATCH] Fix VTPM bindings -- ints in the model are uint64_t at the C binding level. VM's, being referenced from the VTPM, have a backreferring set. Remove the implementation of the old, dead VTPM-related fields on VM. Signed-off-by: Ewan Mellor --- tools/libxen/include/xen_vm.h | 5 ++--- tools/libxen/include/xen_vtpm.h | 23 +++++++++++++++-------- tools/libxen/src/xen_vm.c | 6 +++++- tools/libxen/src/xen_vtpm.c | 31 +++++++++++++++++++++++++++---- 4 files changed, 49 insertions(+), 16 deletions(-) diff --git a/tools/libxen/include/xen_vm.h b/tools/libxen/include/xen_vm.h index 7552e5c7d7..fa0d845515 100644 --- a/tools/libxen/include/xen_vm.h +++ b/tools/libxen/include/xen_vm.h @@ -29,9 +29,9 @@ #include "xen_string_string_map.h" #include "xen_vbd_decl.h" #include "xen_vif_decl.h" -#include "xen_vtpm_decl.h" #include "xen_vm_decl.h" #include "xen_vm_power_state.h" +#include "xen_vtpm_decl.h" /* @@ -98,8 +98,7 @@ typedef struct xen_vm_record enum xen_on_crash_behaviour actions_after_crash; struct xen_vif_record_opt_set *vifs; struct xen_vbd_record_opt_set *vbds; - uint64_t tpm_instance; - uint64_t tpm_backend; + struct xen_vtpm_record_opt_set *vtpms; char *bios_boot; bool platform_std_vga; char *platform_serial; diff --git a/tools/libxen/include/xen_vtpm.h b/tools/libxen/include/xen_vtpm.h index d692731235..54168194b6 100644 --- a/tools/libxen/include/xen_vtpm.h +++ b/tools/libxen/include/xen_vtpm.h @@ -22,13 +22,13 @@ #include "xen_common.h" #include "xen_driver_type.h" -#include "xen_vtpm_decl.h" #include "xen_vm_decl.h" +#include "xen_vtpm_decl.h" /* - * The VTPM class. - * + * The VTPM class. + * * A virtual TPM device. */ @@ -67,8 +67,8 @@ typedef struct xen_vtpm_record char *uuid; struct xen_vm_record_opt *vm; struct xen_vm_record_opt *backend; - int instance; enum xen_driver_type driver; + uint64_t instance; } xen_vtpm_record; /** @@ -78,8 +78,8 @@ extern xen_vtpm_record * xen_vtpm_record_alloc(void); /** - * Free the given xen_vtpm_record, and all referenced values. The given - * record must have been allocated by this library. + * Free the given xen_vtpm_record, and all referenced values. The + * given record must have been allocated by this library. */ extern void xen_vtpm_record_free(xen_vtpm_record *record); @@ -143,7 +143,7 @@ extern xen_vtpm_record_opt_set * xen_vtpm_record_opt_set_alloc(size_t size); /** - * Free the given xen_vtpm_record_opt_set, and all referenced values. + * Free the given xen_vtpm_record_opt_set, and all referenced values. * The given set must have been allocated by this library. */ extern void @@ -192,11 +192,18 @@ extern bool xen_vtpm_get_backend(xen_session *session, xen_vm *result, xen_vtpm vtpm); +/** + * Get the driver field of the given VTPM. + */ +extern bool +xen_vtpm_get_driver(xen_session *session, enum xen_driver_type *result, xen_vtpm vtpm); + + /** * Get the instance field of the given VTPM. */ extern bool -xen_vtpm_get_instance(xen_session *session, int *result, xen_vtpm vtpm); +xen_vtpm_get_instance(xen_session *session, uint64_t *result, xen_vtpm vtpm); #endif diff --git a/tools/libxen/src/xen_vm.c b/tools/libxen/src/xen_vm.c index 0b690b6dc0..6ab0ca12cc 100644 --- a/tools/libxen/src/xen_vm.c +++ b/tools/libxen/src/xen_vm.c @@ -32,9 +32,9 @@ #include "xen_string_string_map.h" #include "xen_vbd.h" #include "xen_vif.h" -#include "xen_vtpm.h" #include "xen_vm.h" #include "xen_vm_power_state_internal.h" +#include "xen_vtpm.h" XEN_FREE(xen_vm) @@ -126,6 +126,9 @@ static const struct_member xen_vm_record_struct_members[] = { .key = "vbds", .type = &abstract_type_ref_set, .offset = offsetof(xen_vm_record, vbds) }, + { .key = "vtpms", + .type = &abstract_type_ref_set, + .offset = offsetof(xen_vm_record, vtpms) }, { .key = "bios_boot", .type = &abstract_type_string, .offset = offsetof(xen_vm_record, bios_boot) }, @@ -200,6 +203,7 @@ xen_vm_record_free(xen_vm_record *record) xen_cpu_feature_set_free(record->vcpus_features_force_off); xen_vif_record_opt_set_free(record->vifs); xen_vbd_record_opt_set_free(record->vbds); + xen_vtpm_record_opt_set_free(record->vtpms); free(record->bios_boot); free(record->platform_serial); free(record->builder); diff --git a/tools/libxen/src/xen_vtpm.c b/tools/libxen/src/xen_vtpm.c index 6a6426c867..c5266b19d4 100644 --- a/tools/libxen/src/xen_vtpm.c +++ b/tools/libxen/src/xen_vtpm.c @@ -24,12 +24,17 @@ #include "xen_common.h" #include "xen_driver_type_internal.h" #include "xen_internal.h" -#include "xen_vtpm.h" #include "xen_vm.h" +#include "xen_vtpm.h" XEN_FREE(xen_vtpm) XEN_SET_ALLOC_FREE(xen_vtpm) +XEN_ALLOC(xen_vtpm_record) +XEN_SET_ALLOC_FREE(xen_vtpm_record) +XEN_ALLOC(xen_vtpm_record_opt) +XEN_RECORD_OPT_FREE(xen_vtpm) +XEN_SET_ALLOC_FREE(xen_vtpm_record_opt) static const struct_member xen_vtpm_record_struct_members[] = @@ -46,6 +51,9 @@ static const struct_member xen_vtpm_record_struct_members[] = { .key = "driver", .type = &xen_driver_type_abstract_type_, .offset = offsetof(xen_vtpm_record, driver) }, + { .key = "instance", + .type = &abstract_type_int, + .offset = offsetof(xen_vtpm_record, instance) } }; const abstract_type xen_vtpm_record_abstract_type_ = @@ -161,7 +169,24 @@ xen_vtpm_get_backend(xen_session *session, xen_vm *result, xen_vtpm vtpm) bool -xen_vtpm_get_instance(xen_session *session, int *result, xen_vtpm vtpm) +xen_vtpm_get_driver(xen_session *session, enum xen_driver_type *result, xen_vtpm vtpm) +{ + abstract_value param_values[] = + { + { .type = &abstract_type_string, + .u.string_val = vtpm } + }; + + abstract_type result_type = xen_driver_type_abstract_type_; + char *result_str = NULL; + XEN_CALL_("VTPM.get_driver"); + *result = xen_driver_type_from_string(session, result_str); + return session->ok; +} + + +bool +xen_vtpm_get_instance(xen_session *session, uint64_t *result, xen_vtpm vtpm) { abstract_value param_values[] = { @@ -182,5 +207,3 @@ xen_vtpm_get_uuid(xen_session *session, char **result, xen_vtpm vtpm) *result = session->ok ? xen_strdup_((char *)vtpm) : NULL; return session->ok; } - - -- 2.30.2